unit u_PagamentoGera;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DBCtrls, JvExStdCtrls, JvCombobox, dxCore,
  dxButton, ExtCtrls, MMJPanel, DB, DBClient, JvExMask, JvToolEdit,
  JvMaskEdit, JvCheckedMaskEdit, JvDatePickerEdit, FMTBcd, SqlExpr,
  u_FiltroFechamento, DBXPress, ComCtrls, JvExComCtrls, JvProgressBar,
  JvDBProgressBar, JvExControls, JvSpecialProgress;

type
  Tf_PagamentoGera = class(TForm)
    MMJPanel1: TMMJPanel;
    btnSair: TdxButton;
    dxButton2: TdxButton;
    cbPrazo: TJvComboBox;
    lbl1: TLabel;
    lbl2: TLabel;
    ds1: TClientDataSet;
    dtaFec: TJvDatePickerEdit;
    sqldtst_serie: TSQLDataSet;
    sqldtst_serieULTIMO_NUMERO: TIntegerField;
    sqldtstvenc: TSQLDataSet;
    sqldtstvencDATAVENCIMENTO: TDateField;
    lblA: TLabel;
    lblB: TLabel;
    progress: TJvSpecialProgress;
    procedure FormShow(Sender: TObject);
    procedure dxButton2Click(Sender: TObject);
    procedure btnSairClick(Sender: TObject);
    procedure cbPrazoChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    n_parcela : Integer;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  f_PagamentoGera: Tf_PagamentoGera;
  TD: TTransactionDesc;

implementation

uses UDm, uCompraCls;

{$R *.dfm}

procedure Tf_PagamentoGera.FormShow(Sender: TObject);
begin
  if (not dm.parametro.Active) then
    dm.parametro.Open;
  if (dm.parametro.locate('DADOS', 'PRAZO', [loCaseInsensitive])) then
  begin
    try
      if (not dm.cdsPrazo.Active) then
        dm.cdsPrazo.open;
      if (not dm.cdsPrazo.IsEmpty) then
      begin
        dm.CdsPrazo.first;
        cbPrazo.Items.clear;
        while not dm.CdsPrazo.eof do
        begin
          cbPrazo.Items.Add(dm.cdsPrazoPARAMETRO.asString);
          dm.cdsPrazo.next;
        end;
      end;
    except
    end;
  end;
  lblB.Caption := '';
  lblA.Caption := ' Fechamento de ' + IntToStr(f_FiltroFechamento.ds1.RecordCount) + ' NPF.';
end;

procedure Tf_PagamentoGera.dxButton2Click(Sender: TObject);
var fcom: TCompraCls;
   Serie, semErro : String;
   titulo : integer;
begin
  semErro := 'S';
  if (cbPrazo.Visible = true) then
  begin
    if (not dm.cdsPrazo.Locate('PARAMETRO', cbPrazo.Text, [loCaseinsensitive])) then
    begin
      MessageDlg('Escolha o prazo de pagamento.', mtError, [mbOK], 0);
      cbPrazo.SetFocus;
      exit;
    end;
    //cds_compraPRAZO.AsString := cbPrazo.Text;
  end;


  progress.Maximum  := f_FiltroFechamento.ds1.RecordCount;
  progress.Minimum  := 0;
  progress.Position := 0;
  try
    f_FiltroFechamento.ds1.First;
    While not f_FiltroFechamento.ds1.Eof do
    begin
      progress.Position := f_FiltroFechamento.ds1.RecNo;
      if (f_FiltroFechamento.ds1STATUS_NPF.AsString <> 'FINALIZADO') then
      begin
        // Busco a serio
        if (dm.cds_parametro.Active) then
          dm.cds_parametro.Close;
        dm.cds_parametro.Params[0].AsString := 'SERIEPADRAO';
        dm.cds_parametro.Open;
        if (not dm.cds_parametro.IsEmpty) then
        begin
           if (sqldtst_serie.Active) then
             sqldtst_serie.Close;
           sqldtst_serie.Params[0].AsString := dm.cds_parametroDADOS.AsString;
           sqldtst_serie.Open;
           titulo := sqldtst_serieULTIMO_NUMERO.AsInteger + 1;
           Serie := dm.cds_parametroDADOS.AsString;
        end;
        dm.cds_parametro.Close;
        // Insiro a Compra
        fcom := TCompraCls.Create;
        fCom.CodMov               := f_FiltroFechamento.ds1codMovimento.asInteger;
        fCom.DataCompra           := dtaFec.Date;
        fCom.DataVcto             := dtaFec.Date;
        fCom.Serie                := Serie;
        fCom.NotaFiscal           := titulo;
        fCom.CodFornecedor        := f_FiltroFechamento.ds1IDPROPRIETARIO.AsInteger;
        fCom.CodComprador         := 1;
        fCom.CodCCusto            := 0;//ccusto;
        fCom.ValorPagar           := f_FiltroFechamento.ds1VALTOTAL.Value - f_FiltroFechamento.ds1FUNRURAL.AsFloat;
        fCom.Valor                := f_FiltroFechamento.ds1VALTOTAL.Value - f_FiltroFechamento.ds1FUNRURAL.AsFloat;
        fCom.NParcela             := n_parcela;
        fCom.Prazo                := cbPrazo.Text;
        fCom.FormaRec             := '1';
        fCom.Funrural             := f_FiltroFechamento.ds1FUNRURAL.AsFloat;
        fCom.inserirCompra(0);
        // Update SERIE
        var_TXT := 'UPDATE SERIES SET ULTIMO_NUMERO = ' + IntToStr(titulo) +
                   'WHERE SERIE = ' + QuotedStr(Serie);
        dm.sqlsisAdimin.StartTransaction(TD);
        dm.sqlsisAdimin.ExecuteDirect(var_TXT);
        Try
          dm.sqlsisAdimin.Commit(TD);
        except
          if (semErro = 'S') then
            semErro := '';
          semErro := semErro + IntToStr(f_FiltroFechamento.ds1ID_NPF.AsInteger);
          dm.sqlsisAdimin.Rollback(TD); //on failure, undo the changes}
          MessageDlg('Erro no sistema, Desmarcar Titulo Falhou.', mtError,
             [mbOk], 0);
        end;
        // Busco o Vencimento
        if (sqldtstvenc.Active) then
          sqldtstvenc.Close;
        sqldtstvenc.Params[0].AsString := IntToStr(titulo);
        sqldtstvenc.Open;
        // Update MOVIMENTO STATUS E VENCIMENTO
        var_TXT := 'UPDATE MOVIMENTO set STATUS_NPF =  ' +  QuotedStr('FINALIZADO') +
          ', VENCIMENTO = ' + QuotedStr(FormatDateTime('mm/dd/yyyy', sqldtstvencDATAVENCIMENTO.AsDateTime)) +
          ' WHERE CODMOVIMENTO = ' + IntToStr(f_FiltroFechamento.ds1codMovimento.asInteger);
        dm.sqlsisAdimin.StartTransaction(TD);
        dm.sqlsisAdimin.ExecuteDirect(var_TXT);
        Try
           dm.sqlsisAdimin.Commit(TD);
        except
          semErro := 'N';
          dm.sqlsisAdimin.Rollback(TD); //on failure, undo the changes
          MessageDlg('Erro a Atualizar tabela MOVIMENTO campos STATUS_NPF e VENCIMENTO.', mtError, [mbOk], 0);
        end;
      end;
      f_FiltroFechamento.ds1.Next;
    end;
  Finally
    fcom.Free;
  end;
  if (semErro = 'S') then
  begin
    lblB.Font.Color := clMenuHighlight;
    lblB.Caption := ' Feito.';
  end
  else
  begin
    lblB.Caption := ' Erro no fechamento.';
    lblB.Font.Color := clRed;
  end;

end;

procedure Tf_PagamentoGera.btnSairClick(Sender: TObject);
begin
  close;
end;

procedure Tf_PagamentoGera.cbPrazoChange(Sender: TObject);
begin
  if (dm.cdsPrazo.Locate('PARAMETRO', cbPrazo.Text, [loCaseinsensitive])) then
    n_parcela := StrToInt(FloatToStr(dm.cdsPrazoValor.asFloat));
end;

procedure Tf_PagamentoGera.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  progress.Position := 0;
  dm.cdsPrazo.Close;
end;

end.
